﻿//
// Created by Freeman on 2022/1/19.
//

/**
 * 模拟问题：依据题目给出的算法编写代码。
 */

#ifndef PAT_EXERCISES_SIMULATION_H
#define PAT_EXERCISES_SIMULATION_H

#include <string>

using namespace std;

class PAT_A1002 {
public:
    static void solve();
};

class PAT_A1009 {
public:
    static void solve();
};

class PAT_A1042 {
public:
    static void solve();
};

class PAT_A1065 {
public:
    static void solve();

    static bool judge(long long a, long long b, long long c);
};

class PAT_A1011 {
public:
    static void solve();
};

class PAT_A1006 {
public:
    static void solve();

private:
    /**
     * 将HH:MM:SS格式时间转为以秒为单位的时间。
     * @param fTime
     * @return
     */
    static int formatted2Second(string fTime);
};

class PAT_A1036 {
public:
    static void solve();

    class Student {
        string name, gender, ID;
        int score;

    public:
        Student(const string &name, const string &gender, const string &ID, int score) {
            this->name = name;
            this->gender = gender;
            this->ID = ID;
            this->score = score;
        }
    };
};

class PAT_A1019 {
public:
    static void solve();
};

class PAT_A1027 {
public:
    static void solve();
};

class PAT_A1058 {
public:
    static void solve();
};

class PAT_A1073 {
public:
    static void solve();
};

class PAT_A1001 {
public:
    static void solve();
};

class PAT_A1005 {
public:
    static void solve();
};

class PAT_A1035 {
    class Info {
    public:
        string userName;
        char pwd[11];
        bool modified = false;

    public:
        Info(string userName, char *pwd) : userName(std::move(userName)) {
            strcpy(this->pwd, pwd);
        }
    };

public:
    static void solve();
};

class PAT_A1077 {
public:
    static void solve();
};

// ============================== 参考过题解的问题 ==============================

class PAT_A1046 {
public:
    /**
     * 方法：使用数组存储出口1到其余出口的距离，这样只需一次减法即可得到出口i到j沿某个方向的距离。
     */
    static void solve();
};

class PAT_A1031 {
public:
    /**
     * 方法：画出N取5~10的情形，可以发现n1=n3=floor(N/3)
     */
    static void solve();
};

class PAT_A1061 {
public:
    /**
     * 本题要注意每种情况下合法字符的边界。第1个和第2个字符为大写字母的情况下，允许的取值范围分别为A~G和A~N，而非A~Z。
     */
    static void solve();
};

// ============================== 尚存问题的题解 ==============================

/**
 * 状态：测试点全部通过
 * 已知问题：“万节”全为0时输出错误
 */
class PAT_A1082 {
public:
    static void solve();

private:
    /**
     * 针对最多4位数输出汉语读法
     * @param str 待解析数字（字符串形式）
     * @param hasHigher 是否有更高节
     */
    static void lessThan10k(const string &str, bool hasHigher);

    /**
     * 针对单位数输出汉语读法
     * @param digit 带解析数字（字符形式，'0'输出“ling”）
     */
    static void singleDigit(char digit);
};

#endif //PAT_EXERCISES_SIMULATION_H
